// import {of,mergeMap} from 'rxjs';

// mergeMap操作符，用于将每个源值映射到一个新的可观察对象，然后将这些可观察对象的值合并到单一的可观察对象中

class Observable {
    constructor(private _subscribe) {
    }
    //订阅方法
    subscribe(observer){
        return this._subscribe(
            typeof observer === 'function' ?
            {next:observer,complete:()=>{},error:()=>{}}
            : observer,
        );
    }
    pipe(operator){
        return operator(this)
    }
}


function mergeMap(project){
    // 返回一个可接受源可观察对象的函数，老的
    return function(source){
        // 返回一个新的可观察对象
        return new Observable(observer=>{
            source.subscribe(value=>{
                const innerObservable = project(value)
                innerObservable.subscribe(interValue =>observer.next(interValue))
            })
        })
    }
}

// 定义一个of函数。用于创建包含指定值的可观察对象
function of(...values){
    return new Observable((observer)=>{
        values.forEach(value=>{
            observer.next(value)
        })
        observer.complete();
    })
}

of(1,2,3).pipe(
    mergeMap((value)=>of(value * 2))
).subscribe(
    value => console.log(value),
)
